package com.young.launch_task_init.core.listener

import com.young.launch_task_init.core.group.BaseTaskGroup
import com.young.launch_task_init.core.task.base.ITask

/**
 * Author：young
 * .
 * Time： 1/4/2023 上午2:58 周六
 * .
 * Desc：任务完成监听
 */
interface OnCompletedListener {

    /**
     * 任务组每个任务完成的回调
     *
     * @param task 当前完成的任务
     * @param curProgress 当前任务组完成的任务的个数
     * @param maxProgress 当前任务组任务的总个数
     *
     */
    fun onCompletedPerTask(task: ITask, curProgress: Int, maxProgress: Int)

    /**
     * 一组任务完成的回调
     *
     *  @param taskGroup 当前完成的任务组
     * @param curProgress 当前完成的任务组的个数
     * @param maxProgress 当前任务组的总个数
     *
     */
    fun onCompletedPerGroup(taskGroup: BaseTaskGroup<*>, curProgress: Int, maxProgress: Int)


    /**
     * 所有任务平铺后的执行进度（所有任务聚合的完成进度监听，可以用来监听总进度）
     *
     * @param task 当前执行完成的任务
     * @param taskGroup 当前执行任务所属的任务组
     * @param curProgress 当前已完成的任务个数
     * @param maxProgress 总的任务个数
     */
    fun onTotalCompleted(
        task: ITask,
        taskGroup: BaseTaskGroup<*>,
        curProgress: Int,
        maxProgress: Int
    )

    /**
     * 全部任务组任务完成
     *
     * @param elapsedTime 耗时，单位：ms
     */
    fun onCompleted(elapsedTime: Long)
}